import { defineStore } from 'pinia';
import tool from '@/utils/tool';

const defaultTag = [ { name: 'dashboard', locale: 'dashboard', title: '控制台', path: '/dashboard', affix: true } ];
const useTagStore = defineStore('tag', {
  state: () => ({
    tags: (! tool.local.get('tags') || tool.local.get('tags').length === 0 ) ? defaultTag : tool.local.get('tags'),
  }),
  getters: {
    getState() {
      return { ...this.$state };
    },
  },
  actions: {
    addTag(tag) {
      const target = this.tags.find( item => item.path === tag.path );
      if (! target && tag.path ) {
        this.tags.push(tag);
      }
      this.updateTagsToLocal();
    },
    removeTag(tag) {
      let index = 0;
      this.tags.map((item, idx) => {
        if ( item.path === tag.path && ! item.affix ) {
          if (this.tags[(idx + 1)]) {
            index = idx;
          } else if ( idx > 0) {
            index = idx - 1;
          }
          this.tags.splice(idx, 1);
        }
      })
      this.updateTagsToLocal();
      return this.tags[index];
    },
    updateTag(tag) {
      this.tags.map(item => {
        if (item.path === tag.path) {
          item = Object.assign(item, tag);
        }
      })
      this.updateTagsToLocal();
    },
    updateTagTitle(path, title) {
      this.tags.map(item => {
        if (item.path === path) {
          item.customTitle = title;
        }
      })
      this.updateTagsToLocal();
    },
    updateTagsToLocal() {
      tool.local.set('tags', this.tags);
    },
    clearTags() {
      this.tags = defaultTag;
      tool.local.set('tags', defaultTag);
    },
  },
});

export default useTagStore;